package com.dc.juc.example._4_publish;

import com.dc.juc.annoations.NotThreadSafe;
import lombok.extern.slf4j.Slf4j;

/**
 * Description: 对象逃逸
 *
 *  对象的逃逸是错误对象发布的特例，指的是在对象没有完成构造的时候，就发布了对象。
 *  对象逃逸经常发生在构造函数中启动线程或注册监听器时
 *
 * @author: gdc
 * @date: 2021/8/4
 * @version 1.0
 */
@Slf4j
@NotThreadSafe
public class ObjectEscape1 {

    private int thisCanBeEscape = 0;

    public ObjectEscape1() {

    }


    private class InnerClass{
        public InnerClass() {
            log.info("1{}", ObjectEscape1.this.thisCanBeEscape);
        }
    }

    /**
     * 在构造完对象ObjectEscape2之前，就可以在InnerClass的构造函数中获取到thisCanBeEscape的值
     * @param args
     */
    public static void main(String[] args){
        new ObjectEscape1();
    }
}
